8. Consider the point group 4mm. It can be generated from a 4-fold rotation axis about the c-axis and a coinciding mirror plane about the a-c plane.

a. Write down the 3D matrix representations for the two generators in the tetragonal basis.

Solution:

The 4-fold rotation axis maps the $\mathbf{a}$ and $\mathbf{b}$ lattice vectors to $\mathbf{a}'$ and $\mathbf{b}'$, where $\mathbf{a}'$ = $\mathbf{b}$ and $\mathbf{b}'$ = -$\mathbf{a}$. Hence, the matrix is


In [1]:
D_4 = [[0, -1, 0],
       [1, 0, 0],
       [0, 0, 1]]

The mirror plane maps $\mathbf{b}$ lattice vector to $\mathbf{b}'$, where $\mathbf{b}'$ = -$\mathbf{b}$. Hence, the matrix is


In [2]:
D_m = [[1, 0, 0],
       [0, -1, 0],
       [0, 0, 1]]

b. Determine the matrix representations for all symmetry elements in the group, and construct a multiplication table for the 4mm point group.

Solution: All symmetry elements can be obtained by the multiplication of the generators.


In [3]:
import numpy as np

D = {}
D["4"] = np.array(D_4)
D["m"] = np.array(D_m)
D["4_2"] = np.dot(D["4"], D["4"])
D["4_3"] = np.dot(D["4"], D["4_2"])
D["E"] = np.dot(D["4"], D["4_3"])
D["m_4"] = np.dot(D["m"], D["4"])
D["m_4_2"] = np.dot(D["m"], D["4_2"])
D["m_4_3"] = np.dot(D["m"], D["4_3"])

print "The complete set of symmetry elements are given by the following matrices:"
for k, v in D.items():
    print "%s = %s" % (k, str(v))


The complete set of symmetry elements are given by the following matrices:
E = [[1 0 0]
 [0 1 0]
 [0 0 1]]
m = [[ 1  0  0]
 [ 0 -1  0]
 [ 0  0  1]]
4 = [[ 0 -1  0]
 [ 1  0  0]
 [ 0  0  1]]
m_4_2 = [[-1  0  0]
 [ 0  1  0]
 [ 0  0  1]]
m_4_3 = [[0 1 0]
 [1 0 0]
 [0 0 1]]
4_2 = [[-1  0  0]
 [ 0 -1  0]
 [ 0  0  1]]
4_3 = [[ 0  1  0]
 [-1  0  0]
 [ 0  0  1]]
m_4 = [[ 0 -1  0]
 [-1  0  0]
 [ 0  0  1]]

The multiplication table is given below:


In [4]:
import itertools
keys = ["E", "4", "4_2", "4_3", "m", "m_4", "m_4_2", "m_4_3"]
def find_key(m):
    for k, v in D.items():
        if np.all(v == m):
            return k
from prettytable import PrettyTable

t = PrettyTable([""] + keys)
headers = list(keys)
for k1 in keys:
    row = [k1]
    for k2 in keys:
        prod = np.dot(D[k1], D[k2])
        row.append(find_key(prod))
    t.add_row(row)
print t


+-------+-------+-------+-------+-------+-------+-------+-------+-------+
|       |   E   |   4   |  4_2  |  4_3  |   m   |  m_4  | m_4_2 | m_4_3 |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
|   E   |   E   |   4   |  4_2  |  4_3  |   m   |  m_4  | m_4_2 | m_4_3 |
|   4   |   4   |  4_2  |  4_3  |   E   | m_4_3 |   m   |  m_4  | m_4_2 |
|  4_2  |  4_2  |  4_3  |   E   |   4   | m_4_2 | m_4_3 |   m   |  m_4  |
|  4_3  |  4_3  |   E   |   4   |  4_2  |  m_4  | m_4_2 | m_4_3 |   m   |
|   m   |   m   |  m_4  | m_4_2 | m_4_3 |   E   |   4   |  4_2  |  4_3  |
|  m_4  |  m_4  | m_4_2 | m_4_3 |   m   |  4_3  |   E   |   4   |  4_2  |
| m_4_2 | m_4_2 | m_4_3 |   m   |  m_4  |  4_2  |  4_3  |   E   |   4   |
| m_4_3 | m_4_3 |   m   |  m_4  | m_4_2 |   4   |  4_2  |  4_3  |   E   |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+

c. What are the subgroups of the 4mm point group?

Solution:

4, m, m_4, m_4_2 and m_4_3 are subgroups of 4mm.

d. Draw a stereographic projection for the point group.

Solutinon:

Refer to Structure of Materials Chapter 9, Fig 9.7.

e. Determine the orbit for the general position (x, y, z).

Solution:

The orbit of the generalposition is given by:


In [5]:
from sympy import symbols
x, y, z = symbols("x y z")
p = [x, y, z]
for k, v in D.items():
    print np.dot(v, p)


[x y z]
[x -y z]
[-y x z]
[-x y z]
[y x z]
[-x -y z]
[y -x z]
[-y -x z]

f. Identify possible special positions and determine the orbits of points lying on these special positions.

Solution:

There are special positions on the 4-fold axis (0, 0, z), the mirror plane (0, y, 0) and the diagonal mirror plane (x, x, z).

The orbit for the special position (0, 0, z) on the 4-fold axis is given by:


In [6]:
p = [0, 0, z]
orbit = []
for k, v in D.items():
    orbit.append(str(np.dot(v, p)))
for o in set(orbit):
    print o


[0 0 z]

The orbit for the special position (0, y, 0) on the mirror plane on the a-c plane is given by:


In [7]:
p = [0, y, 0]
orbit = []
for k, v in D.items():
    orbit.append(str(np.dot(v, p)))
for o in set(orbit):
    print o


[0 y 0]
[0 -y 0]
[-y 0 0]
[y 0 0]

The orbit for the special position (x, x, z) on the diagonal mirror plane is given by:


In [8]:
p = [x, x, z]
orbit = []
for k, v in D.items():
    orbit.append(str(np.dot(v, p)))
for o in set(orbit):
    print o


[-x x z]
[x x z]
[-x -x z]
[x -x z]

Note that all special positions have orbits that have < 8 elements.